# -*- coding: utf-8 -*-
# @Author   : 白云酱
# Data      :
# Software  :pyCharm
# version   :python 3.10
# @File     :db_util.py

import pymysql


# 定义一个数据库操作的工具类
class DBUtil:
    # 初始化
    __conn = None
    __cursor = None

    # 1 创建链接
    @classmethod
    def __get_conn(cls):
        # 判定连接对象是否存在
        if cls.__conn is None:
            cls.__conn = pymysql.connect(host='47.112.145.120',
                                         port=5515,
                                         user='wuyongxing',
                                         password='123456qwe',
                                         databass="WuYongXinShiHanHan")
            return cls.__conn


    # 2 创建游标
    @classmethod
    def __get_cursor(cls):
        # 这个是用来数据库返回的是字典形式的
        cls.__cursor = cls.__get_cursor().cursor(pymysql.cursors.DictCursor)

        return cls.__cursor


    # 3 只行sql
    @classmethod
    def exe_sql(cls,sql):
        try:
            # 获取游标对象
            cursor = cls.__get_cursor()
            # 调用游标对象.execute(sql)
            cursor.execute(sql)
            # 如果是,进行查询:
            if sql.split()[0].lower() =='select':
                # 返回数据
                return cursor.fetchall()
            #否则:
            else:
                # 提交事务
                cls.__conn.commit()
                # 返回受影响的行数
                return cursor.rowcount
        except Exception as e:
            # 回滚事务
            cls.__conn.rollback()
            # 抛出异常
            print(e)
        finally:
            # 关闭游标
            cls.__close_cursor()
            # 关闭连接
            cls.__close_conn()

    # 4 关闭游标
    @classmethod
    def __close_cursor(cls):
        if cls.__cursor:
            cls.__cursor.close()
            cls.__cursor = None

    # 5关闭连接
    @classmethod
    def __close_conn(cls):
        if cls.__conn:
            cls.__conn.close()
            cls.__conn = None


if __name__ == "__main__":
    sql = "select * from sy_member"
    print(DBUtil.exe_sql(sql))